
package com.svh.Paginator;

import com.svh.Entidad.Empleado;
import com.svh.Entidad.Usuario;
import com.svh.Hibernate.HibernatePaginator;
import com.svh.Utils.Estado;
import org.hibernate.HibernateException;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Property;
import org.hibernate.criterion.Restrictions;

/**
 *
 * @author Luis Alonso Ballena Garcia
 */
public class UsuarioPaginator extends HibernatePaginator<Usuario> {
    
    private static final int USER_ADMIN = 1;
    
    public static final int ONLY_USER_NOT_ASSIGNED = 1;
    
    private final int opcionBusqueda;
    
    public UsuarioPaginator() {
        super();
        opcionBusqueda = 0;
    }

    public UsuarioPaginator(int opcionBusqueda) {
        super();
        this.opcionBusqueda = opcionBusqueda;
    }
    
    
    
    @Override
    public void initFiltro() {
        DetachedCriteria criteria = null;
        try{
            criteria = DetachedCriteria.forClass(Usuario.class,"user")
                    .createAlias("user.perfil","perfil");
            switch(opcionBusqueda){
                case ONLY_USER_NOT_ASSIGNED:
                    DetachedCriteria subconsulta  = DetachedCriteria.forClass(Empleado.class,"empleado")
                            .add(Restrictions.isNotNull("empleado.usuario"))
                            .setProjection(Property.forName("empleado.usuario"));
                    criteria.add(Property.forName("user.id").notIn(subconsulta));
                    break;
            }
            criteria.add(Restrictions.eq("user.estado",Estado.ACTIVO.getValor()))
                    .add(Restrictions.ne("user.id",USER_ADMIN));
            super.filtroCriteria = criteria;
        }catch(HibernateException e){
            e.printStackTrace();
        }catch(Exception e)
        {
            e.printStackTrace();
        }
    }

    
}
